Dual-boot Manjaro Mint en mbr: résoudre les problèmes de mise à jour

Dans le cadre des dual-boot ou trial-boot purement Linux, on peut être confronté à des soucis de compatibilité dans les versions de grub. Ca peut parfois se manifester dès l’installation, mais aussi parfois après une mise à jour d’une des distributions.

1. Situation de départ

On part d’une installation réalisée en mode Legacy, sur disque mbr (ms-dos) entre une Linux Mint installée en premier temps, puis une Xubuntu, et enfin une Manjaro installée à la fin. C’est donc le grub de cette dernière version qui va contrôler le triple démarrage, puisqu’il va écraser le précédent Grub.  Partons d’une situation théorique comme celle-ci :

Mon image

Le tout est installé sur le disque /dev/sda. C’est le grub de Manjaro qui dirige l’ensemble. Or, il se peut qu’une mise à jour d’une des distributions se fasse tôt ou tard, et qu’elle modifie le fonctionnement du démarrage. C’est ce qui s’est produit ici avec la version Mint. Et là, surprise : en voulant exécuter Manjaro, on obtient ceci :

Mon image

2. Explication du problème

En faisant sa mise à jour, Linux Mint a substitué son propre Grub à celui de Manjaro pour gérer le démarrage. Or, les paramétrages des deux versions sont différentes, et le Grub de Mint n’est plus capable de lancer Manjaro correctement. Plusieurs solutions sont possibles, plus ou moins compliquées.

3. Les solutions

3.1. Solution rapide (spécifique pour Manjaro)

On peut imaginer des solutions proches pour d’autres distributions, mais sans test, il est difficile de l’affirmer. On démarre sur le grub de Mint, et au lieu de choisir la version normale de Manjaro, on choisit les options avancées ce qui affichera ceci :

Mon image
Parmi les trois versions proposées, il suffira de choisir la version « fallback » pour pouvoir lancer une version encore opérationnelle de Manjaro. Une fois le bureau affiché, une simple réinstallation de grub redonnera la main à Manjaro qui refonctionnera correctement :

sudo grub-install /dev/sda
sudo update-grub

3.2. Solution plus complexe, mais plus universelle : le chroot

Il n’est pas sûr que toutes les distributions offrent une solution de secours comme c’est le cas de Manjaro. Dans ce cas, il va falloir chrooter, autrement dit réparer depuis le liveCD ou liveUSB en modifiant le répertoire racine, exactement comme si on agissait depuis un Linux installé.

  • Montage de la partition Manjaro vers /mnt
mount /dev/sda1 /mnt
  • Montage des outils pour le chroot (c’est pareil sous toutes les distributions)
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts/
  • Le chroot 
chroot /mnt
  • Activation de os-prober (pour les autres versions à détecter)
pacman -S mtools os-prober
  • Installation et mise à jour de grub
grub-install /dev/sda
update-grub (ici, il faut un peu de patience)

On redémarre et on retrouve son grub Manjaro et sa version fonctionnelle.

3.3. Anticipation et explication

Le mieux est tout de même de comprendre le souci. Et pour cela, il faut comparer les versions de grub.cfg de chacune des deux distributions. On les trouve dans /boot/grub de chaque OS respectif en cours d’exécution (nb. On ne peut ouvrir le fichier grub.cfg de Manjaro qu’en mode admin).

  • La version de Manjaro affiche ceci :
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Manjaro Linux' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-8eb0defb-f6cd-48cf-b8cd-2f34975c0139' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,msdos1' --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 8eb0defb-f6cd-48cf-b8cd-2f34975c0139
else
search --no-floppy --fs-uuid --set=root 8eb0defb-f6cd-48cf-b8cd-2f34975c0139
fi
linux /boot/vmlinuz-4.19-x86_64 root=UUID=8eb0defb-f6cd-48cf-b8cd-2f34975c0139 rw quiet
initrd /boot/intel-ucode.img /boot/initramfs-4.19-x86_64.img
}
  • Et celle de Mint va exécuter cela :
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Manjaro Linux (18.0.2) (sur /dev/sda1)' --class manjarolinux --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-44d457a9-2ba0-49ca-a90d-6da3ee74a0ac' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 44d457a9-2ba0-49ca-a90d-6da3ee74a0ac
else
search --no-floppy --fs-uuid --set=root 44d457a9-2ba0-49ca-a90d-6da3ee74a0ac
fi
linux /boot/vmlinuz-4.19-x86_64 root=UUID=44d457a9-2ba0-49ca-a90d-6da3ee74a0ac rw quiet
initrd /boot/intel-ucode.img
}

Outre les incohérences sur les UUID (on pourrait remettre ça en ordre), on voit que l’erreur majeure de Mint apparaît en dernière ligne, car une instruction manque :

boot/initramfs-4.19-x86_64.img

Pour éviter que le problème ne se produise, il est possible d’ajouter par avance les bonnes commandes issues du grub.cfg de  Manjaro au fichier 40_custom de la version Mint. On ouvre le fichier en admin (mousepad est à adapter à l’éditeur de texte de la distribution utilisée : gedit, xed ou autre):

sudo mousepad /etc/grub.d/40_custom

Cela donne ceci :  

Mon image
Ici, j’ai choisi d’ajouter à la fois la version normale de Manjaro et les versions avancées. Il ne reste plus qu’à redonner la main à Mint en réinstallant son grub :

sudo grub-install /dev/sda
sudo update-grub

On redémarre pour trouver ceci  :

Mon image
On voit que deux possibilités de lancer Manjaro sont offertes. La première demeure HS, mais la seconde, elle, fonctionne et lance Manjaro tout à fait normalement. Il suffirait d’avoir passé avant la réinstallation de grub sous Mint la commande suivante pour n’avoir que la version correcte de Manjaro :

sudo chmod -x /etc/grub.d/30_os-prober

Ainsi, les prochaines mises à jour ne causeraient plus le moindre souci, et Manjaro se lancerait toujours bien, même depuis Mint.

Cette démo a été conçue d’après ce sujet  sur PC-Astuces.